package com.hucsmn.stumansys.dao;

import com.hucsmn.stumansys.dao.impl.AdminDaoImpl;
import com.hucsmn.stumansys.entity.Admin;

import java.util.List;

/**
 * 管理员记录持久化层。
 * @author hucsmn
 */
public interface AdminDao {
    /**
     * 获取 AdminDao 实现类的实例对象。
     * @return AdminDao 实例。
     */
    static AdminDao getInstance() {
        return new AdminDaoImpl();
    }

    /**
     * 添加管理员账户，成功时设置实体类的 ID。
     * @param admin 管理员账户，非空。
     * @return 是否添加成功。
     */
    boolean addAdmin(Admin admin);

    /**
     * 删除管理员账户。
     * @param id 管理员账户 ID。
     * @return 是否删除成功。
     */
    boolean removeAdmin(int id);

    /**
     * 通过 ID 修改管理员帐户。
     * @param admin 管理员账户。
     * @return 是否修改成功。
     */
    boolean setAdmin(Admin admin);

    /**
     * 通过账户名获取管理员账户。
     * @param name 管理员账户名。
     * @return 管理员账户，查询失败时返回 null。
     */
    Admin getAdminByName(String name);

    /**
     * 通过账户名查找管理员账户是否存在。
     * @param name 管理员账户名。
     * @return 查询成功且管理员账户存在时返回 true，否则返回 false。
     */
    boolean existsAdminName(String name);

    /**
     * 查询所有账户名列表，按照升序排列。
     * @return 账户名列表，查询失败返回 null。
     */
    List<String> getAdminNames();

    /**
     * 通过前缀查询所有账户名列表，按照升序排列。
     * @param prefix 账户名前缀，不能为 null。
     * @return 账户名列表，查询失败返回 null。
     */
    List<String> getAdminNamesLike(String prefix);
}
